﻿using DataLayer;
using SupportLayer.Constantes.Outros;
using SupportLayer.Enums;
using SupportLayer.Objetos.Elementos;
using SupportLayer.Objetos.Outros;
using SupportLayer.Objetos.Placa;
using SupportLayer.Objetos.Usuario;
using SupportLayer.Util.ExtensionMethods;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TranSys_Web.TranSys
{
	public partial class createPlaca : System.Web.UI.Page
	{
		private UCs.ucPlaca placa;

		public int UsuarioID
		{
			get
			{
				if ((Session[OUTROS.USUARIO_ID] != null) &&
					(Session[OUTROS.USUARIO_ID].ToString() != string.Empty))
				{
					int id = 0;
					Int32.TryParse(Session[OUTROS.USUARIO_ID].ToString(), out id);
					return id;
				}
				return 0;
			}
		}

		protected void Page_Load(object sender, EventArgs e)
		{
			if (UsuarioID <= 0)
				Response.Redirect("login.aspx?" + OUTROS.CODIGO_ERRO + "=" + ((int)CodigoErro.UsuarioNaoLogado).ToString());

			UsuarioClass Usuario = new UsuarioClass();
			Usuario = new DataLayer.AcessoBanco().SelectUser(UsuarioID);
			lblBemVindoUsuario.Text = "Bem vindo(a), " + Usuario.Nome;

			placa = (UCs.ucPlaca)LoadControl("/TranSys/UCs/ucPlaca.ascx");

			CarregaDDLs();
			CarregaBanner();
		}

		private void CarregaDDLs()
		{
			ListItem[] lst = new ListItem[]
			{
				new ListItem(){ Text = ((int)AlturaLetra.A100).ToString(), Value = ((int)AlturaLetra.A100).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A125).ToString(), Value = ((int)AlturaLetra.A125).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A150).ToString(), Value = ((int)AlturaLetra.A150).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A175).ToString(), Value = ((int)AlturaLetra.A175).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A200).ToString(), Value = ((int)AlturaLetra.A200).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A225).ToString(), Value = ((int)AlturaLetra.A225).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A250).ToString(), Value = ((int)AlturaLetra.A250).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A300).ToString(), Value = ((int)AlturaLetra.A300).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A350).ToString(), Value = ((int)AlturaLetra.A350).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A400).ToString(), Value = ((int)AlturaLetra.A400).ToString() },
				new ListItem(){ Text = ((int)AlturaLetra.A450).ToString(), Value = ((int)AlturaLetra.A450).ToString() }
			};

			ListItem[] lstArredondamento = new ListItem[]
			{
				new ListItem(){ Text = ((int)Arredondamento.A50).ToString(), Value = ((int)Arredondamento.A50).ToString() },
				new ListItem(){ Text = ((int)Arredondamento.A100).ToString(), Value = ((int)Arredondamento.A100).ToString() },
				new ListItem(){ Text = ((int)Arredondamento.A150).ToString(), Value = ((int)Arredondamento.A150).ToString() },
				new ListItem(){ Text = ((int)Arredondamento.A200).ToString(), Value = ((int)Arredondamento.A200).ToString() },
				new ListItem(){ Text = ((int)Arredondamento.A250).ToString(), Value = ((int)Arredondamento.A250).ToString() }
			};


			List<CorClass> Cores = new CorClass().GetAll();

			ListItem[] lstCor = new ListItem[Cores.Count];

			for (int iCor = 0; iCor < Cores.Count; iCor++)
				lstCor[iCor] = new ListItem() { Text = Cores[iCor].Descricao, Value = Cores[iCor].ID.ToString() };

			ListItem[] lstFontes = new ListItem[]
			{
				new ListItem(){ Text = "D", Value = FONTES.RoadGeekD },
				new ListItem(){ Text = "E(m)", Value = FONTES.RoadGeekEM, Selected = true }
			};

			if (!IsPostBack)
			{
				ddlAlturaLetra1.Items.AddRange(lst);
				ddlAlturaLetra2.Items.AddRange(lst);
				ddlAlturaLetra3.Items.AddRange(lst);
				ddlAlturaLetra4.Items.AddRange(lst);

				ddlCor1.Items.AddRange(lstCor);
				ddlCor2.Items.AddRange(lstCor);
				ddlCor3.Items.AddRange(lstCor);
				ddlCor4.Items.AddRange(lstCor);

				ddlArredondarHorizontalmente.Items.AddRange(lstArredondamento);
				ddlArredondarVerticalmente.Items.AddRange(lstArredondamento);

				ddlArredondarHorizontalmente.Items.FindByValue(((int)Arredondamento.A50).ToString()).Selected = true;
				ddlArredondarVerticalmente.Items.FindByValue(((int)Arredondamento.A50).ToString()).Selected = true;

				ddlFonte1.Items.AddRange(lstFontes);
				ddlFonte2.Items.AddRange(lstFontes);
				ddlFonte3.Items.AddRange(lstFontes);
				ddlFonte4.Items.AddRange(lstFontes);
			}
		}

		private void CarregaBanner()
		{
			DirectoryInfo dInfo = new DirectoryInfo(Server.MapPath("~/Imagens/Banner"));
			DataTable dt = new DataTable();
			dt.Columns.Add("Banner");

			foreach (var arquivo in dInfo.GetFiles())
				if (arquivo.Name != "next.png" && arquivo.Name != "prev.png")
					dt.Rows.Add(ResolveUrl("/Imagens/Banner/" + arquivo.Name));

			rptSlider.DataSource = dt;
			rptSlider.DataBind();
		}

		protected void btnGerar_Click(object sender, EventArgs e)
		{
			try
			{
				#region Validações

				if (chkAgruparSetas12.Checked)
					if (txtMensagem1.Text.Equals(string.Empty))
						throw new ApplicationException("Digite a mensagem 1!");
					else if (txtMensagem2.Text.Equals(string.Empty))
						throw new ApplicationException("Digite a mensagem 2!");

				if (chkAgruparSetas23.Checked)
					if (txtMensagem2.Text.Equals(string.Empty))
						throw new ApplicationException("Digite a mensagem 2!");
				if (chkAgruparSetas23.Checked)
					if (txtMensagem3.Text.Equals(string.Empty))
						throw new ApplicationException("Digite a mensagem 3!");

				if (chkAgruparSetas34.Checked)
					if (txtMensagem3.Text.Equals(string.Empty))
						throw new ApplicationException("Digite a mensagem 3!");
				if (chkAgruparSetas34.Checked)
					if (txtMensagem4.Text.Equals(string.Empty))
						throw new ApplicationException("Digite a mensagem 4!");

				if (!txtMensagem1.Text.Equals(string.Empty))
					if (!txtMensagem1.Text.HasUpperCase())
						throw new ApplicationException("Todas as mensagens devem ter ao menos uma letra maiúscula!");

				if (!txtMensagem2.Text.Equals(string.Empty))
					if (!txtMensagem2.Text.HasUpperCase())
						throw new ApplicationException("Todas as mensagens devem ter ao menos uma letra maiúscula!");

				if (!txtMensagem3.Text.Equals(string.Empty))
					if (!txtMensagem3.Text.HasUpperCase())
						throw new ApplicationException("Todas as mensagens devem ter ao menos uma letra maiúscula!");

				if (!txtMensagem4.Text.Equals(string.Empty))
					if (!txtMensagem4.Text.HasUpperCase())
						throw new ApplicationException("Todas as mensagens devem ter ao menos uma letra maiúscula!");

				if ((ddlFonte1.SelectedItem.Value == FONTES.RoadGeekD) && (txtMensagem1.Text != txtMensagem1.Text.ToUpper()))
					throw new ApplicationException("Para utilizar a fonte D as letras da mensagem 1 devem ser maiúsculas!");
				if ((ddlFonte2.SelectedItem.Value == FONTES.RoadGeekD) && (txtMensagem2.Text != txtMensagem2.Text.ToUpper()))
					throw new ApplicationException("Para utilizar a fonte D as letras da mensagem 2 devem ser maiúsculas!");
				if ((ddlFonte3.SelectedItem.Value == FONTES.RoadGeekD) && (txtMensagem3.Text != txtMensagem3.Text.ToUpper()))
					throw new ApplicationException("Para utilizar a fonte D as letras da mensagem 3 devem ser maiúsculas!");
				if ((ddlFonte4.SelectedItem.Value == FONTES.RoadGeekD) && (txtMensagem4.Text != txtMensagem4.Text.ToUpper()))
					throw new ApplicationException("Para utilizar a fonte D as letras da mensagem 4 devem ser maiúsculas!");

				#endregion Validações

				PlacaClass objPlaca = new PlacaClass();
				objPlaca.ArredondamentoHorizontal =
					(Arredondamento)(Convert.ToInt32(ddlArredondarHorizontalmente.SelectedItem.Value));
				objPlaca.ArredondamentoVertical =
					(Arredondamento)(Convert.ToInt32(ddlArredondarVerticalmente.SelectedItem.Value));

				#region Linha 1

				if (txtMensagem1.Text != "")
				{
					AlturaLetra altura1 = (AlturaLetra)Convert.ToInt32(ddlAlturaLetra1.SelectedItem.Value);
					bool chk1 = chkItalico1.Checked;

					List<ElementoClass> lstElements = new List<ElementoClass>();

					lstElements.Add(new ElementoClass(
						new MensagemClass(txtMensagem1.Text, altura1, ddlFonte1.SelectedItem.Value, chk1)));
					if (chkPicto1.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/TAD-15.png", altura1)));

					if (hdfSetaLinha1.Value != "0")
						lstElements.Add(new ElementoClass(new SetaClass(
							"../Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha1.Value)).ToString() + ".png", altura1,
							(TipoSeta)Convert.ToInt32(hdfSetaLinha1.Value.ToString()))));

					LinhaClass linha = new LinhaClass()
					{
						AlturaLetra = altura1,
						Cor = new CorClass().FindByID(Convert.ToInt32(ddlCor1.SelectedItem.Value)).CorFundo,
						CorTexto = new CorClass().FindByID(Convert.ToInt32(ddlCor1.SelectedItem.Value)).CorLetra,
						Elements = lstElements,
						Separador = true,
						Fonte = ddlFonte1.SelectedItem.Value,
						AgruparSeta = (chkAgruparSetas12.Checked ? true : false),
						AgruparPictograma = chkAgruparPictogramas12.Checked
					};
					objPlaca.Linhas.Add(linha);
				}

				#endregion Linha 1

				#region Linha 2

				if (txtMensagem2.Text != "")
				{
					AlturaLetra altura2 = (AlturaLetra)Convert.ToInt32(ddlAlturaLetra2.SelectedItem.Value);
					bool chk2 = chkItalico2.Checked;

					List<ElementoClass> lstElements = new List<ElementoClass>();
					lstElements.Add(new ElementoClass(
						new MensagemClass(txtMensagem2.Text, altura2, ddlFonte2.SelectedItem.Value, chk2)));

					if (chkPicto2.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/TAD-15.png", altura2)));
					else if (chkAgruparPictogramas12.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/TAD-15.png", altura2)));

					if (chkAgruparPictogramas12.Checked)
					{
						if (hdfSetaLinha1.Value != "0")
							lstElements.Add(new ElementoClass(new SetaClass(
								"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha1.Value)).ToString() + ".png", altura2,
								(TipoSeta)Convert.ToInt32(hdfSetaLinha1.Value.ToString()))));
					}
					else
					{
						if (hdfSetaLinha2.Value != "0")
							lstElements.Add(new ElementoClass(new SetaClass(
									"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha2.Value)).ToString() + ".png", altura2,
									(TipoSeta)Convert.ToInt32(hdfSetaLinha2.Value.ToString()))));
					}
					//PictogramaClass pic = new PictogramaClass()

					LinhaClass linha2 = new LinhaClass()
					{
						AlturaLetra = altura2,
						Cor = new CorClass().FindByID(Convert.ToInt32(ddlCor2.SelectedItem.Value)).CorFundo,
						CorTexto = new CorClass().FindByID(Convert.ToInt32(ddlCor2.SelectedItem.Value)).CorLetra,
						Elements = lstElements,
						Separador = true,
						Fonte = ddlFonte2.SelectedItem.Value,
						AgruparSeta = (chkAgruparSetas23.Checked ? true : false),
						AgruparPictograma = chkAgruparPictogramas23.Checked
					};
					objPlaca.Linhas.Add(linha2);
				}

				#endregion Linha 2

				#region Linha 3

				if (txtMensagem3.Text != "")
				{
					AlturaLetra altura3 = (AlturaLetra)Convert.ToInt32(ddlAlturaLetra3.SelectedItem.Value);
					bool chk3 = chkItalico3.Checked;

					List<ElementoClass> lstElements = new List<ElementoClass>();
					lstElements.Add(new ElementoClass(
						new MensagemClass(txtMensagem3.Text, altura3, ddlFonte3.SelectedItem.Value, chk3)));

					if (chkPicto3.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/SVA-10a.png", altura3)));
					else if (chkAgruparPictogramas23.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/TAD-15.png", altura3)));

					if (chkAgruparPictogramas23.Checked)
					{
						if (!chkAgruparPictogramas12.Checked)
						{
							if (hdfSetaLinha2.Value != "0")
								lstElements.Add(new ElementoClass(new SetaClass(
									"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha2.Value)).ToString() + ".png", altura3,
									(TipoSeta)Convert.ToInt32(hdfSetaLinha2.Value.ToString()))));
						}
						else
							if (hdfSetaLinha1.Value != "0")
								lstElements.Add(new ElementoClass(new SetaClass(
									"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha1.Value)).ToString() + ".png", altura3,
									(TipoSeta)Convert.ToInt32(hdfSetaLinha1.Value.ToString()))));
					}
					else
					{
						if (hdfSetaLinha3.Value != "0")
							lstElements.Add(new ElementoClass(new SetaClass(
										"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha3.Value)).ToString() + ".png", altura3,
										(TipoSeta)Convert.ToInt32(hdfSetaLinha3.Value.ToString()))));
					}

					LinhaClass linha3 = new LinhaClass()
					{
						AlturaLetra = altura3,
						Cor = new CorClass().FindByID(Convert.ToInt32(ddlCor3.SelectedItem.Value)).CorFundo,
						CorTexto = new CorClass().FindByID(Convert.ToInt32(ddlCor3.SelectedItem.Value)).CorLetra,
						Elements = lstElements,
						Separador = true,
						Fonte = ddlFonte3.SelectedItem.Value,
						AgruparSeta = (chkAgruparSetas34.Checked ? true : false),
						AgruparPictograma = chkAgruparPictogramas34.Checked
					};
					objPlaca.Linhas.Add(linha3);
				}
				#endregion Linha 3

				#region Linha 4

				if (txtMensagem4.Text != "")
				{
					AlturaLetra altura4 = (AlturaLetra)Convert.ToInt32(ddlAlturaLetra4.SelectedItem.Value);
					bool chk4 = chkItalico4.Checked;

					List<ElementoClass> lstElements = new List<ElementoClass>();
					lstElements.Add(new ElementoClass(
						new MensagemClass(txtMensagem4.Text, altura4, ddlFonte4.SelectedItem.Value, chk4)));

					if (chkPicto4.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/TAD-15.png", altura4)));
					else if (chkAgruparPictogramas34.Checked)
						lstElements.Add(new ElementoClass(new PictogramaClass("/Imagens/Pictogramas/TAD-15.png", altura4)));

					if (chkAgruparPictogramas34.Checked)
					{
						if (!chkAgruparPictogramas23.Checked)
						{
							if (hdfSetaLinha3.Value != "0")
								lstElements.Add(new ElementoClass(new SetaClass(
									"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha3.Value)).ToString() + ".png", altura4,
									(TipoSeta)Convert.ToInt32(hdfSetaLinha3.Value))));
						}
						else
							if (hdfSetaLinha2.Value != "0")
								lstElements.Add(new ElementoClass(new SetaClass(
									"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha2.Value)).ToString() + ".png", altura4,
									(TipoSeta)Convert.ToInt32(hdfSetaLinha2.Value))));
					}
					else
					{
						if (hdfSetaLinha4.Value != "0")
							lstElements.Add(new ElementoClass(new SetaClass(
											"/Imagens/Setas/Brancas/" + ((TipoSeta)Convert.ToInt32(hdfSetaLinha4.Value)).ToString() + ".png", altura4,
											(TipoSeta)Convert.ToInt32(hdfSetaLinha4.Value))));
					}

					LinhaClass linha4 = new LinhaClass()
					{
						AlturaLetra = altura4,
						Cor = new CorClass().FindByID(Convert.ToInt32(ddlCor4.SelectedItem.Value)).CorFundo,
						CorTexto = new CorClass().FindByID(Convert.ToInt32(ddlCor4.SelectedItem.Value)).CorLetra,
						Elements = lstElements,
						Fonte = ddlFonte4.SelectedItem.Value,
						Separador = true
					};
					objPlaca.Linhas.Add(linha4);
				}

				#endregion Linha 4

				placa.Separador = ",";
				placa.Placa = objPlaca;
				objPlaca.CalculatePlaca();
				placePlaca.Controls.Add(placa);

				if (chkArredondarH.Checked)
					if (chkArredondarV.Checked)
						lblDimensoesPlaca.Text = "Dimensões da placa: " + objPlaca.RoundedWidth + "mm x " + objPlaca.RoundedHeight + "mm";
					else
						lblDimensoesPlaca.Text = "Dimensões da placa: " + objPlaca.Width + "mm x " + objPlaca.RoundedHeight + "mm";
				else
					if (chkArredondarV.Checked)
						lblDimensoesPlaca.Text = "Dimensões da placa: " + objPlaca.RoundedWidth + "mm x " + objPlaca.Height + "mm";
					else
						lblDimensoesPlaca.Text = "Dimensões da placa: " + objPlaca.Width + "mm x " + objPlaca.Height + "mm";

				lblTransys.Text = "Placa Criada com o TranSys PLACA Web ®";

				LogClass log = new AcessoBanco().SelectLog(DateTime.Now.Date, UsuarioID);

				if (log != null)
				{
					log.QuantidadePlacas += 1;
					new AcessoBanco().UpdateLog(log);
				}
				else
				{
					log = new LogClass();
					log.UsuarioID = UsuarioID;
					log.Data = DateTime.Now.Date;
					log.QuantidadePlacas = 1;

					new AcessoBanco().InsertLog(log);
				}
			}
			catch (Exception ex)
			{
				ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "validação",
					"alert('" + ex.Message + "');", true);
			}
		}

		protected void btnLimpar_Click(object sender, EventArgs e)
		{
			txtMensagem1.Text = "";
			txtMensagem2.Text = "";
			txtMensagem3.Text = "";
			txtMensagem4.Text = "";

			chkAgruparSetas12.Checked = false;
			chkAgruparSetas23.Checked = false;
			chkAgruparSetas34.Checked = false;

			hdfSetaLinha1.Value = "";
			hdfSetaLinha2.Value = "";
			hdfSetaLinha3.Value = "";
			hdfSetaLinha4.Value = "";

			lblDimensoesPlaca.Text = "";
			lblTransys.Text = "";

			ddlFonte1.Items.FindByValue(FONTES.RoadGeekEM).Selected = true;
			ddlFonte2.Items.FindByValue(FONTES.RoadGeekEM).Selected = true;
			ddlFonte3.Items.FindByValue(FONTES.RoadGeekEM).Selected = true;
			ddlFonte4.Items.FindByValue(FONTES.RoadGeekEM).Selected = true;
		}

		protected void btnLogout_Click(object sender, ImageClickEventArgs e)
		{
			Session[OUTROS.USUARIO_ID] = "";
			Response.Redirect("login.aspx");
		}
	}
}